Metadata-Version: 2.1
Name: sqlite-rw
Version: 0.0.1
Summary: sqlite读写分离库
Home-page: https://github.com/xupingmao/sqlite-rw
Author: mark
Author-email: 578749341@qq.com
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Description-Content-Type: text/markdown
License-File: LICENSE

<!--
 * @Author       : xupingmao
 * @email        : 578749341@qq.com
 * @Date         : 2023-03-11 13:22:54
 * @LastEditors  : xupingmao
 * @LastEditTime : 2023-03-11 13:42:41
 * @FilePath     : /sqlite-rw/README.md
 * @Description  : 描述
-->
# sqlite-rw

为sqlite提供读写分离能力，提高并发度。

# 解决什么问题?

sqlite是一个很好用的嵌入式数据库，但是由于sqlite采用了库级别的文件锁，所以并发能力不强，当存在慢SQL，比如在大表上`select count(*) from large_table`的时候，会导致其他任务无法写入。

`sqlite-rw`就是为了解决这个问题的，思路如下
- 采用读写分离的存储模式，每次写入会持久化写库，并且记录日志到binlog表，然后异步写入读库。
- 读取的时候可以选择从读库或者写库读取，默认从读库读取。

# 提高并发度的原理
- sqlite本身读取是支持并发的，但是写入是不能和读取并发的。所以读库本身是支持并发读取的，同步的写操作是通过id主键写入的，耗时会比较短，基本上不会阻塞读操作。
- 由于是读写分离的，在读库存在慢SQL的情况下，写库也能够正常工作，在读库慢SQL执行完成之后，系统会把写库的数据同步到读库中，使两者保持一致。

# 使用限制和影响
- 存储量相比于单独的sqlite会翻倍
- 写入性能会有所下降，待详细的基准测试
- 依赖`web.py`的`db`接口进行操作
